Instructies For Each...Next

   

In instructies For Each...Next wordt voor elk object in een collectie of voor elk element in een matrixeen instructieblok herhaald. Elke keer dat de lus wordt uitgevoerd, stelt Visual Basic automatisch een variabele in. De volgende procedure sluit alle formulieren behalve het formulier met de lopende procedure:

Sub CloseForms()
    For Each frm In Application.Forms
        If frm.Caption <> Screen. ActiveForm.Caption Then frm.Close
    Next
End Sub

De volgende programmacode laat elk element in een matrix door een lus gaan en stelt de waarde van alle elementen in op de waarde van de indexvariabele I.

Dim TestMatrix(10) As Integer, I As Variant
For Each I In TestArray
    TestArray(I) = I
Next I

Lussen in een cellenbereik uitvoeren

Met de lus For Each...Next kunt u de cellen in een bereik door een lus laten gaan. De volgende procedure voert lussen uit op het bereik A1:D10 op Blad1 en stelt elk getal waarvan de absolute waarde lager dan 01 is, op 0 (zero) in.

Sub RoundToZero()
    For Each MyObject in MyCollection
        If Abs(MyObject.Value) < 0.01 Then MyObject.Value = 0
    Next
End Sub

Een lus For Each...Next verlaten

Met behulp van de instructie Exit For kunt u een lus For Each...Next verlaten. U kunt deze instructie gebruiken als er een fout optreedt. De instructie Exit For bevindt zich in het instructieblok True van een instructie If...Then...Else of Select Case die op het opsporen van fouten is ingesteld. Als de fout niet optreedt, geeft de instructie If...Then...Else als resultaat False weer en wordt de lus gewoon verder uitgevoerd.

In het volgende voorbeeld wordt gezocht naar de eerste cel in het bereik A1:B5 die geen getal bevat. Als zo'n cel wordt gevonden, verschijnt een bericht en breekt Exit For de lus af.

Sub TestForNumbers()
    For Each MyObject In MyCollection
        If IsNumeric(MyObject.Value) = False Then
            MsgBox "Object bevat een niet-numerieke waarde."
            Exit For
        End If
    Next c
End Sub